package Proxy_Test;

/**
 * 代理设计模式
 * 所有的真实业务操作都会有一个与之辅助的功能类共同完成
 */
interface ISubject{
    public void save();//核心功能是救人
}
class RealSubject implements ISubject{
    public void save(){
        System.out.println("警察用警棍救出了人质");
    }
}

class ProxySubject implements ISubject{//代理实现
    private ISubject subject; //真正的操作业务
    //在创建代理类对象的时候必须设置要代理的真是主题
    public ProxySubject(ISubject subject){
        this.subject = subject;
    }
    public void broke(){
        System.out.println("1.破门而入");
    }
    public void get(){
        System.out.println("2.得到建议用为奖");
    }
    public void save(){//接口子类一定要实现抽象方法
        this.broke();//真是操作前的准备
        this.subject.save();//调用真是的业务
        this.get();//操作后的收尾
    }

}
class Factory{
    public static ISubject getInstance(){
        return new ProxySubject(new RealSubject());
    }
}
public class ProxyDemo {
    public static void main(String[] args) {
        ISubject subject = Factory.getInstance();
        subject.save();
    }
}
